1.
sort::sort(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{ui.setupUi(this);
ui.groupBox_2->hide();ui.groupBox_3->hide();
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
}
上面两个layout是不一样的。一个是ui的网格布局,一个是主窗口的。要达到窗口自己设置最佳显示效果的效果,应该用this->layout()。
setSizeConstraint(QLayout::SetFixedSize)用户不能调整窗口大小,由系统自己显示最佳大小(比如隐藏控件那一整块就不显示)
tr("%1[*] - %2").arg(name).arg(txt)
第一个arg替换%1 第二个arg替换%2 例:myFile.txt[*] - txt
2.
QSplitter
mainSplitter->setStretchFactor(0,1);
mainSplitter->setStretchFactor(1,3);
可以通过上面的代码调整分割线初始位置。mainSplitter里有两个控件,第一个伸展因子为1,第二个为3.表示初始的时候控件“1”大小比控件“0”大(具体大小可以自己去调,数字相差越大,大小相差越大,最好不要用负数)。你将窗口放大以后,那两个控件也是按1:3的比例扩展。如果你只设置了一个,另外一个伸展因子默认为0,则初始化后两个控件占的空间相等
3.
prepareGeometryChange() 用于在项即将发生改变时调用,光用update()是不行的
4.
QPair<QString, double> pair;
QPair 储存一对数据
5.
setZvalue(1000) (保持在最上面,依照具体数值)
setFlag(ItemIgnoresTransformations, true) 确保何如缩放大小都不变
6.
实现拖拽需要重写两个事件:DragEnterEvent和DropEvent
7. 拖动
QDrag *drag = new QDrag(this);
if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
delete item; //要在整个拖动操作完成后,才删除原来旧地址的项
如果要让qt知道接受拖动操作,需要在DragEnterEvent,DragMoveEvent和DropEvent事件中标示event->setDropAction(Qt::MoveAction)和event->accept()来接受事件
8.
java风格的迭代器next()返回迭代器右边的项同时把迭代器向后移一个位置。previous同理。
remove删除最后一次跳过的项
setValue()修改最后一次被跳过的项
9.
foreach(QPair<int, int> p, list)//不能这样写 foreach参数错误
QPair<int, int> p;
foreach(p, list);//含逗号的数据类型必须定义在循环外
10.
QProcess用时需要连接到的一些信号和槽
connect(&process, SIGNAL(readyReadStandardError()), this, SLOT(updateOutputTextEdit()));
connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(processFinished(int, QProcess::ExitStatus)));
connect(&process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError)));