工作笔记(03/2012)

1、QTableView QTableWidget中翻页功能的实现
通过QTableView中的滑动条位置的获取与设置来实现:

//通过其继承的函数获取当前滑动条
QScrollBar * QAbstractScrollArea::verticalScrollBar () const;
//获取当前滑动条的位置
int QAbstractSlider::value () const;
//设置当前滑动条的位置
void QAbstractSlider::setSliderPosition ( int );

通过传入上一页或下一页的滑动条位置来实现翻页。
上一页的位置 = 当前位置 – 一页显示的行数;
下一页的位置 = 当前位置 + 一页显示的行数;
注意确保位置的有效性:上一页的位置>=0;下一页的位置<=最大位置;
滑动条能移动的最大位置获取:
int QAbstractSlider::maximum () const;

2、QTableView QTableWidget中平均分布各列(行)或者使最后一列自适应宽度的实现

//使行列头自适应界面宽度
QHeaderView * QTableView::horizontalHeader () const; //行标题
QHeaderView * QTableView::verticalHeader () const; //列标题
void QHeaderView::setStretchLastSection ( bool stretch );//最后一行(列)填充空白
void QHeaderView::setResizeMode ( ResizeMode mode = QHeaderView::Stretch );//所有行(列)均分填充空白

3、QListWidget中条目的删除实现

//先移除该条目的父子关系
QListWidgetItem * QListWidget::takeItem ( int row );//移除后不再由Qt管理该对象,必须进行手动delete
//然后手动delete该条目
delete pTmpListWidgetItem;//例子
使用下面的函数不能实现条目的删除效果:
void QListWidget::removeItemWidget ( QListWidgetItem * item );//introduced in Qt 4.3.

4、QWidget关闭时对用户进行关闭提示的实现
通过重载closeEvent()事件处理函数来实现
void QWidget::closeEvent ( QCloseEvent * event ); [virtual protected]
示例:

void CExecResultWidget::closeEvent(QCloseEvent *event)
{
	int ret = QMessageBox::question(this, tr("关闭窗口"), 
		tr("是否确定关闭当前执行方案结果界面?"), 
		QMessageBox::Yes |QMessageBox::No,QMessageBox::No);
	if(ret == QMessageBox::Yes)
	{
		event->accept();
	}
	else 
	{
		event->ignore();
	}
}

5、登录对话框类GUI的实现机制
使用QDialog的exec()函数与Accepted/Rejected属性实现

6、QWidget关闭内容,关闭程序时关闭所有打开窗口的实现

//关闭相关的槽函数
//发送QCloseEvent,closeEvent()默认实现为隐藏QWidget,与setAttribute()的设置有关
bool QWidget::close (); [slot] 
//应用成功退出,等价于调用exit(0)
void QCoreApplication::quit (); [static slot]
//结束exec的事件循环,退出应用:0表示成功,否则失败
void QCoreApplication::exit ( int returnCode = 0 ); [static]

关闭程序时关闭所有打开窗口的实现
方法一:建立各窗口之间的父子关系,则关闭父窗口时,所有的子窗口将被关闭
方法二:在main.cpp中连接信号void QApplication::lastWindowClosed ();[signal]到quit函数

//1.首先设置主窗口的属性,也可以不设,因为默认所有的QWidget该属性为真
void QWidget::setAttribute(Qt::WA_QuitOnClose,true); 
//2.因为默认的关系,必须设置其它独立窗口的该属性为false,只能有一个窗口的该属性为真
void QWidget::setAttribute(Qt::WA_QuitOnClose,false); 
//3.在main.cpp中连接信号与槽
QApplication a(argc, argv);
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit));

就可实现当关闭主窗口时,所有的打开窗口都会因程序退出而被关闭。

7、父子QWidget的关系与独立窗口的父子QWidget实现

  • 存在父子关系的widgets,每个子widget都显示在父widget内.
  • 当父widget析构时,所有的子widget自动析构
  • 如果一个widget构造时没有父对象,那么被视为一个窗口,或者顶级widget.
  • 当一个QDialog为一个widget的子widget时,可以显示为一个独立的窗口,但是一个QWidget为一个widget时则显示在父QWidget内.
  • 一个QMainWindow窗口中不能再设置布局,只能设置中心QWidget,因此间接的布局方法是借用中心窗体
QWidget widget.setLayout(pMainLayout);
QMainWindow mainwindow.setCentralWidget(widget);

 

  • 一个QDialog中可以再设置布局

8、Qt中使用信号与槽机制时的注意事项

  • 信号与槽的实现函数中,函数的参数要慎重的使用C++的引用,因为引用的数据可能已经被析构掉了.
Tagged , , . Bookmark the permalink.

One Response to 工作笔记(03/2012)

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">