• 3993阅读
  • 3回复

[提问]C++GUI Qt4编程 第二章的问题 [复制链接]

上一主题 下一主题
离线qazaq408
 

只看楼主 倒序阅读 楼主  发表于: 2014-11-18
我的工具 ubuntukylin14.04 + Qt5.3 + g++4.8
书里第二章几个例子使用了IDE...然后我当初安装QT的时候不知道为什么桌面上没有显示QTcreator的图标,所以我到现在都不知道这么调那东西出来

然后书里第二章的例子因为用了QTcreator而且没给代码。。。所以我只能自己摸索着自己写。。。

跑题了。。

书里例题要实现一个框,里面3个QGroupBox,其中2个是隐藏的,还有3个QPushButton,然后通过点击QPushButton可以是那2个QGroupBox显示出来
然后我设计了Sort类,用各种layout把东西放进去
然后程序运行出来是这样


这里点击more按钮
就可以把那2个隐藏的显示出来,但我的窗体,右侧的两个按钮不知道怎么回事就掉下去了。。


all_layout->SetSizeConstriant(QLayout::setFixedSize)    //固定布局器大小,这个最后布局器,
我用SetSizeConstriant()函数固定他的大小,


那3个按钮我放在布局器button_layout里面,本来想用
button_layout->SetSizeConstriant(QLayout::setFixedSize)  //固定3个按钮位置
但没用,运行的时候还是按钮还是会“掉下来“


求问怎么才能让这3个QPushButton不掉下下来。
离线qazaq408

只看该作者 1楼 发表于: 2014-11-18
2楼代码
头文件
  1. #include<QGroupBox>
  2. #include<QPushButton>
  3. #include<QLabel>
  4. #include<QComboBox>
  5. #include<QDialog>
  6. class Sort:public QDialog
  7. {
  8.   Q_OBJECT
  9. public:
  10.   Sort(QWidget* parent = 0);  //构造函数
  11. private:
  12.   //右边三个按钮
  13.   QPushButton* ok_button ;
  14.   QPushButton* cancel_button ;
  15.   QPushButton* more_button ;
  16.   //第一个群组P
  17.   QGroupBox* p_key;
  18.   QLabel* p_column;
  19.   QLabel* p_order;
  20.   QComboBox* p_combo;
  21.   QComboBox* p_order_combo;
  22.   //第二个群组S
  23.   QGroupBox* s_key;
  24.   QLabel* s_column;
  25.   QLabel* s_order;
  26.   QComboBox* s_combo;
  27.   QComboBox* s_order_combo;
  28.   //第三个群组T
  29.   QGroupBox* t_key;
  30.   QLabel* t_column;
  31.   QLabel* t_order;
  32.   QComboBox* t_combo;
  33.   QComboBox* t_order_combo;
  34. private slots:
  35.   void show_group();  //私有槽,用于显示隐藏的2个群组
  36.   void hide_group();  //点击cancel是隐藏群组
  37. };

然后类定义
  1. #include"sort.h"
  2. #include<QHBoxLayout>
  3. #include<QVBoxLayout>
  4. Sort::Sort(QWidget* parent):QDialog(parent)
  5. {
  6.   //第一个群组P布局
  7.   p_key = new QGroupBox("Primary Key");
  8.   p_column = new QLabel("Column");
  9.   p_order = new QLabel("Order");
  10.   p_combo = new QComboBox;
  11.   p_order_combo = new QComboBox;
  12.   QHBoxLayout* p_up = new QHBoxLayout;
  13.   p_up->addWidget(p_column);
  14.   p_up->addWidget(p_combo);
  15.   QHBoxLayout* p_down = new QHBoxLayout;
  16.   p_down->addWidget(p_order);
  17.   p_down->addWidget(p_order_combo);
  18.   QVBoxLayout* p_main = new QVBoxLayout;
  19.   p_main->addLayout(p_up);
  20.   p_main->addLayout(p_down);
  21.   p_key->setLayout(p_main);
  22.   //第二个群组S布局
  23.   s_key = new QGroupBox("Secondary Key");
  24.   s_column = new QLabel("Column");
  25.   s_order = new QLabel("Order");
  26.   s_combo = new QComboBox;
  27.   s_order_combo = new QComboBox;
  28.   QHBoxLayout* s_up = new QHBoxLayout;
  29.   s_up->addWidget(s_column);
  30.   s_up->addWidget(s_combo);
  31.   QHBoxLayout* s_down = new QHBoxLayout;
  32.   s_down->addWidget(s_order);
  33.   s_down->addWidget(s_order_combo);
  34.   QVBoxLayout* s_main = new QVBoxLayout;
  35.   s_main->addLayout(s_up);
  36.   s_main->addLayout(s_down);
  37.   s_key->setLayout(s_main);
  38.   s_key->hide();  //隐藏群组
  39.   //第三个群组T布局
  40.   t_key = new QGroupBox("Tertiary Key");
  41.   t_column = new QLabel("Column");
  42.   t_order = new QLabel("Order");
  43.   t_combo = new QComboBox;
  44.   t_order_combo = new QComboBox;
  45.   QHBoxLayout* t_up = new QHBoxLayout;
  46.   t_up->addWidget(t_column);
  47.   t_up->addWidget(t_combo);
  48.   QHBoxLayout* t_down = new QHBoxLayout;
  49.   t_down->addWidget(t_order);
  50.   t_down->addWidget(t_order_combo);
  51.   QVBoxLayout* t_main = new QVBoxLayout;
  52.   t_main->addLayout(t_up);
  53.   t_main->addLayout(t_down);
  54.   t_key->setLayout(t_main);
  55.   t_key->hide();  //隐藏
  56. //设置三个群组布局和右边的三个按钮
  57.   ok_button = new QPushButton("OK");
  58.   cancel_button = new QPushButton("Cancel");
  59.   more_button = new QPushButton("More");
  60.   
  61.   
  62.   QVBoxLayout* button_layout = new QVBoxLayout;
  63.   button_layout->addWidget(ok_button);
  64.   button_layout->addWidget(cancel_button);
  65.   button_layout->addWidget(more_button);
  66.   button_layout->setSizeConstraint(QLayout::SetFixedSize);  //按钮的布局器大小不变
  67.   //为什么上面我固定了按钮的布局器,按钮还是会掉下来。。。
  68. //问题在这里
  69. //
  70. //
  71. //
  72.   QVBoxLayout* group_layout = new QVBoxLayout;
  73.   group_layout->addWidget(p_key);
  74.   group_layout->addWidget(s_key);
  75.   group_layout->addWidget(t_key);
  76.   QHBoxLayout* all_layout = new QHBoxLayout;
  77.   all_layout->addLayout(group_layout);
  78.   all_layout->addLayout(button_layout);
  79.   
  80.   all_layout->setSizeConstraint(QLayout::SetFixedSize);  //固定布局器大小
  81.   setLayout(all_layout);
  82.   setWindowTitle("Untitked");
  83.   //建立信号与槽
  84.   connect(more_button,SIGNAL(clicked()),this,SLOT(show_group()));
  85.   connect(cancel_button,SIGNAL(clicked()),this,SLOT(hide_group()));
  86. }
  87. void Sort::show_group()  //sort类的槽,用于显示隐藏的窗体
  88. {
  89.   s_key->show();
  90.   t_key->show();
  91. }
  92. void Sort::hide_group()
  93. {
  94.   s_key->hide();
  95.   t_key->hide();
  96. }

主函数
  1. #include"sort.h"
  2. #include<QApplication>
  3. int main(int argc , char* argv[])
  4. {
  5.   QApplication app(argc,argv);
  6.   Sort* sort = new Sort;
  7.   sort->show();
  8.   return app.exec();
  9. }


离线dbzhang800

只看该作者 2楼 发表于: 2014-11-19
三个button添加完之后,加上一句

button_layout->addStretch();

试试
离线qazaq408

只看该作者 3楼 发表于: 2014-11-19
回 dbzhang800 的帖子
dbzhang800:三个button添加完之后,加上一句
button_layout->addStretch();
试试 (2014-11-19 09:29) 

饿。太神奇了。。。谢谢了。。
书里这部分内容使用QTcreator写的,很多关键性的代码没给出来
快速回复
限100 字节
 
上一个 下一个