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++的引用,因为引用的数据可能已经被析构掉了.
your post is interesting and useful. lista de email lista de email lista de email lista de email lista de email