我的GUI程序只有一个主界面,其中有一个多张page的QStackedWidget,QStackedWidget的page通过几个按钮来切换。QStackedWidget的每个widget里面都有一个QTabWidget。这样即我称作“单窗口多层次”的一个界面程序,有可能不是很专业哈,目的是:让用户鼠标最多点三次基本就能找到想要的东西。
我把所有的东西都弄在了一个main.ui里面,这样造成main.ui非常庞大,以文本的形式看了一下,有近5000行左右。相应的C++源文件在实现全部功能的情况下,也会有成千上万行,这让我很头疼。
为此我有两个想法:
一、拆分main.ui。鉴于一个tabWidget还是过大,我打算以tabWidget的一个页面为单位拆分,单独写成一个.ui文件,再配以相应的C++源文件。最后将这些.ui以一个个子窗体的形式嵌入到main.ui的tabWidget页里面去。这样是否可行?额外的资源占用会不会很多?
二、只拆分C++的源文件,.ui文件只有一个main.ui。还是以main.ui的tabWidget为单位。但是这样有个问题:所有的控件都在main.ui里面,但引用控件都是通过m_ui->tab_1->pushButton_1等诸如此类的指针,所以要把这个源文件操作的控件所在的widget以指针的形式传递进来,即前例中的的m_ui->tab_1。如果这样的话,QT Creator就不能有相应的控件代码提示了。控件很多,手打效率很低下啊。咋办?
所以问问大家,在这种情况下,有啥好的建议没有?我该采用哪种程序结构?或者还有什么方法能达到用户点三次就能找到自己想要的东西的效果?俺是新人,多多指教~~~
------解决方案--------------------
建议:一个page一个UI文件,一个类。
------解决方案--------------------
界面的思路没有错。
至于觉得文件太大,page或者tab做一个ui都无所谓了。主要看模块划分。
因为能做成一个ui文件的界面一般cpp里都只处理自己的控件,如果要和其他控件交互,用信号槽,交给父控件管理吧。
还有不必局限于ui文件啊, cpp写界面也很快很灵活的。
------解决方案--------------------
看帮助中有.
QWidget *firstPageWidget = new QWidget;
QWidget *secondPageWidget = new QWidget;
QWidget *thirdPageWidget = new QWidget;
QStackedWidget *stackedWidget = new QStackedWidget;
stackedWidget->addWidget(firstPageWidget);
stackedWidget->addWidget(secondPageWidget);
stackedWidget->addWidget(thirdPageWidget);
也就是一每一个widget都可以单独一个UI文件,一个类,只需要你在代码中stackedWidget->addWidget(firstPageWidget);
即可。
如新建一个form:public QWidget就可以用下面实现。
Form *frm = new Form();
ui->stackedWidget->addWidget(frm);
ui->stackedWidget->setCurrentIndex(1);
这样就可以把多个页面分开了。
另外即然用了TabWidget不就可以多页了吗?为什么还要用stackedWidget呢。
------解决方案--------------------
我觉得一个功能界面的组成 = 一个ui文件 + 配合实现界面的部分代码cpp(易更改易维护) + 功能实现代码cpp
是比较合理的。 至于把一个ui文件拆成多个,没什么必要吧。
------解决方案--------------------
使用Designer做.ui的时候可以用自己的UI类的,你只需要用一个Widget提升成指定的组件就可以了