• 7725阅读
  • 36回复

[讨论]求助Qt布局管理的问题 [复制链接]

上一主题 下一主题
离线490365333
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-21
关键词: 求助问题布局
本来想做个类似这样表格,

结果做出来成了这样。左上角的表格行标和列标都被挡住了。

代码待会儿发
离线490365333
只看该作者 1楼 发表于: 2011-12-21
//mywnd类的头文件
class mywnd : public QWidget
{
    Q_OBJECT
private:
    QLabel *NameLabel;
    QLabel *SexLabel;
    QLabel *TelLabel;
    QLabel *EmailLabel;
    QLabel *BirthdayLabel;
    QLabel *AddrLabel;
    QLabel *AttachLabel;

    QLineEdit *NameEdit;
    QComboBox *SexBox;
    QLineEdit *TelEdit;
    QLineEdit *EmailEdit;
    QDateEdit *BirthdayEdit;
    QLineEdit *AddrEdit;
    QLineEdit *AttachEdit;

    QPushButton *OpenButton;
    QPushButton *AddButton;
    QPushButton *RemoveButton;
    QPushButton *QuitButton;
    QPushButton *SaveButton;
    QPushButton *SaveAsButton;
    QPushButton *CleanButton;
    QPushButton *CloseButton;
    QPushButton *NewButton;

    QStatusBar *Information;
    datatable *MyTable;

    QFile MyFile;
    QDataStream MyStream;
    QMap<QString,info> NewData;
    bool IsSaved;
    QApplication *MyApp;
private slots:
    void add();
    void remove();
    void openfile();
    void save();
    void quit();
    void clean();
    void closefile();
    void saveas();
    void newfile();
signals:
    void datachanged(QMap<QString,info> *);
public:
    mywnd(QApplication *);
};
离线490365333
只看该作者 2楼 发表于: 2011-12-21
//mywnd类的构造函数
mywnd::mywnd(QApplication *a)
{
    setWindowTitle(tr("Contact"));

    MyApp=a;
    IsSaved=true;

    NameLabel=new QLabel(tr("&Name"));
    SexLabel=new QLabel(tr("&Sex"));
    TelLabel=new QLabel(tr("&Telephone Number"));
    EmailLabel=new QLabel(tr("&E-mail Address"));
    BirthdayLabel=new QLabel(tr("&Birthyday"));
    AddrLabel=new QLabel(tr("&Address"));
    AttachLabel=new QLabel(tr("Atta&chment"));

    NameEdit=new QLineEdit;
    TelEdit=new QLineEdit;
    SexBox=new QComboBox;
    SexBox->addItem(tr("male"));
    SexBox->addItem(tr("female"));
    EmailEdit=new QLineEdit;
    AddrEdit=new QLineEdit;
    AttachEdit=new QLineEdit;
    BirthdayEdit=new QDateEdit;
    BirthdayEdit->setDisplayFormat(QString("MM.dd.yyyy"));
    BirthdayEdit->setDate(QDate::currentDate());

    AddButton=new QPushButton(tr("&Add"));
    AddButton->setEnabled(false);
    QuitButton=new QPushButton(tr("&Quit"));
    RemoveButton=new QPushButton(tr("&Remove"));
    RemoveButton->setEnabled(false);
    NewButton=new QPushButton(tr("&New"));
    OpenButton=new QPushButton(tr("&Open"));
    OpenButton->setDefault(true);
    SaveButton=new QPushButton(tr("&Save"));
    SaveButton->setEnabled(false);
    SaveAsButton=new QPushButton(tr("Sa&ve As"));
    SaveAsButton->setEnabled(false);
    CleanButton=new QPushButton(tr("C&lean"));
    CloseButton=new QPushButton(tr("&Close"));
    CloseButton->setEnabled(false);

    NameLabel->setBuddy(NameEdit);
    SexLabel->setBuddy(SexBox);
    TelLabel->setBuddy(TelEdit);
    EmailLabel->setBuddy(EmailEdit);
    BirthdayLabel->setBuddy(BirthdayEdit);
    AddrLabel->setBuddy(AddrEdit);
    AttachLabel->setBuddy(AttachEdit);

    Information=new QStatusBar(this);
    MyTable=new datatable(this);

    QFormLayout *UpLayout=new QFormLayout;
    UpLayout->addRow(NameLabel,NameEdit);
    UpLayout->addRow(TelLabel,TelEdit);
    UpLayout->addRow(SexLabel,SexBox);
    UpLayout->addRow(EmailLabel,EmailEdit);
    UpLayout->addRow(BirthdayLabel,BirthdayEdit);
    UpLayout->addRow(AddrLabel,AddrEdit);
    UpLayout->addRow(AttachLabel,AttachEdit);

    QHBoxLayout *DownLayout=new QHBoxLayout;
    DownLayout->addWidget(OpenButton);
    DownLayout->addWidget(NewButton);
    DownLayout->addWidget(AddButton);
    DownLayout->addWidget(RemoveButton);
    DownLayout->addWidget(CleanButton);
    DownLayout->addWidget(SaveButton);
    DownLayout->addWidget(SaveAsButton);
    DownLayout->addWidget(CloseButton);
    DownLayout->addWidget(QuitButton);

    QVBoxLayout *MainLayout=new QVBoxLayout;
    MainLayout->addLayout(UpLayout);
    MainLayout->addWidget(MyTable);
    MainLayout->addLayout(DownLayout);
    MainLayout->addWidget(Information);

    setLayout(MainLayout);
    setFixedHeight(sizeHint().height());

    QObject::connect(QuitButton,SIGNAL(clicked()),this,SLOT(quit()));
    QObject::connect(AddButton,SIGNAL(clicked()),this,SLOT(add()));
    QObject::connect(RemoveButton,SIGNAL(clicked()),this,SLOT(remove()));
    QObject::connect(OpenButton,SIGNAL(clicked()),this,SLOT(openfile()));
    QObject::connect(SaveButton,SIGNAL(clicked()),this,SLOT(save()));
    QObject::connect(CleanButton,SIGNAL(clicked()),this,SLOT(clean()));
    QObject::connect(CloseButton,SIGNAL(clicked()),this,SLOT(closefile()));
    QObject::connect(SaveAsButton,SIGNAL(clicked()),this,SLOT(saveas()));
    QObject::connect(NewButton,SIGNAL(clicked()),this,SLOT(newfile()));
    QObject::connect(this,SIGNAL(datachanged(QMap<QString,info> *)),MyTable,SLOT(update(QMap<QString,info> *)));
}
离线490365333
只看该作者 3楼 发表于: 2011-12-21
//datatable类的头文件
class datatable:public QTableWidget
{
Q_OBJECT
private:
QTableWidget *mytable;
public: datatable(QWidget *);
public slots: void update(const QMap<QString,info> *);
};
离线ninsun

只看该作者 4楼 发表于: 2011-12-21
用设计师多简单……
干嘛要纯手写界面代码呢……
离线490365333
只看该作者 5楼 发表于: 2011-12-21
很多书都说初学者应该手工写代码,而且我也喜欢这方式。设计师生成的代码不清晰,不能很清楚的看到细节。
离线490365333
只看该作者 6楼 发表于: 2011-12-21
回 4楼(ninsun) 的帖子
很多书都说初学者应该手工写代码,而且我也喜欢这方式。设计师生成的代码不清晰,不能很清楚的看到细节。

而且手工写代码又不是不可以,我就是来问怎么解决问题的
离线roywillow

只看该作者 7楼 发表于: 2011-12-21
先说个无关的
    EmailEdit=new QLineEdit;
    AddrEdit=new QLineEdit;
    AttachEdit=new QLineEdit;
    BirthdayEdit=new QDateEdit;
完全没有指定parent并且似乎也没看见delete……是因为托付给了layout……?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线490365333
只看该作者 8楼 发表于: 2011-12-21
回 7楼(roywillow) 的帖子
果然是无关的
这个反正没引起问题,应该这些内存最后会被操作系统回收。而且很多书上就这么写的
离线roywillow

只看该作者 9楼 发表于: 2011-12-21
回 8楼(490365333) 的帖子
看了一下似乎没发现问题……
你试试把MainLayout那一块的add注释掉一两行看看有没有出现预期效果?隐约感觉好像是那个table的问题……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线490365333
只看该作者 10楼 发表于: 2011-12-21


现在的代码是
QVBoxLayout *MainLayout=new QVBoxLayout;
    //MainLayout->addWidget(MyTable);
    MainLayout->addLayout(UpLayout);
    MainLayout->addLayout(DownLayout)
离线490365333
只看该作者 11楼 发表于: 2011-12-21
回 9楼(roywillow) 的帖子
10L发出来了,如果把代码改成那样,就会有如图的效果,还是不对
离线roywillow

只看该作者 12楼 发表于: 2011-12-21
回 11楼(490365333) 的帖子

table仍然会出现是预期中的,毕竟你给table指定了parent
但是那样子很怪呢……如果换成普通的QTableWidget是否正常?如果正常的话那就是继承的时候出问题了?
再不然就是因为其他的组件没有指定parent?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ninsun

只看该作者 13楼 发表于: 2011-12-21
其实吧……
你真的想手写……
可以用设计师设计好以后看他的代码是怎么写的……
离线ninsun

只看该作者 14楼 发表于: 2011-12-21
然后,datatable都设置了父对象了,再放到布局之中应该是不会起作用的吧……
这种用法太奇怪了……
离线490365333
只看该作者 15楼 发表于: 2011-12-21
回 12楼(roywillow) 的帖子

还是不正常,用一般的QTableWidget不会显示行标列标
离线roywillow

只看该作者 16楼 发表于: 2011-12-21
回 14楼(ninsun) 的帖子
我的做法是给所有layout和所有组件都设置parent,并没发现有什么问题,布局依然起效
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线490365333
只看该作者 17楼 发表于: 2011-12-21
而且必须要继承,因为要有updata槽来更新显示信息
离线roywillow

只看该作者 18楼 发表于: 2011-12-21
回 17楼(490365333) 的帖子
无解中
没有行列标是因为你没有设置的缘故
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线490365333
只看该作者 19楼 发表于: 2011-12-21
再说为什么QStatusBar也指定了this为parent,怎么就没有问题
离线ninsun

只看该作者 20楼 发表于: 2011-12-21
我低端了……
因为不手写界面代码所以没遇到过这个问题。
一个建议是,你用设计师画好一个界面,然后看看它的代码是怎么写的,然后照抄就好了……
离线490365333
只看该作者 21楼 发表于: 2011-12-21
回 18楼(roywillow) 的帖子
datatable::datatable(QWidget *parent)
{
    mytable=new QTableWidget(parent);
    mytable->setColumnCount(7);
    QStringList headers;
    headers<<tr("Name")<<tr("Sex")<<tr("Telephone Number")<<tr("Email Address")<<tr("Birthday")<<tr("Address")<<tr("Attachment");
    mytable->setHorizontalHeaderLabels(headers);
}
设置了列标啊


至于parent的问题我觉得本来就不存在,因为最后执行了setLayout,所有的组件都在layout之中,setlayout自动把组件的父窗口重定义成主窗口
离线490365333
只看该作者 22楼 发表于: 2011-12-21
class datatable:public QTableWidget
{
    Q_OBJECT
private:
    QTableWidget *mytable;
public:
    datatable(QWidget * parent=0);
public slots:
    void myupdate(QMap<QString,info> *);
};
这个继承有问题么?
离线roywillow

只看该作者 23楼 发表于: 2011-12-21
回 21楼(490365333) 的帖子
你是在一个QWidget中又放置了一个QTableWidget,并且以那个QWidget为parent
那么
你有没有给那个QWidget内部设定一个layout呢……
也就是说
datatable没有布局,那么QTableWidget该如何布局?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 24楼 发表于: 2011-12-21
回 22楼(490365333) 的帖子
22楼这个继承我表示很无语
本身父类就是个TableWidget了,然后还有个私有成员变量是TableWidget……这是打算做什么呢……

最好是搞清楚,你是打算让QTableWidget作为继承类的父类呢,还是打算让他作为继承类的成员变量?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 25楼 发表于: 2011-12-21
这么试试
class datatable:public QTableWidget
{
    Q_OBJECT
public:
    datatable(QWidget * parent=0);
public slots:
    void myupdate(QMap<QString,info> *);
};

datatable::datatable(QWidget *parent) : QTableWidget(parent)
{
    this->setColumnCount(7);
    QStringList headers;
    headers<<tr("Name")<<tr("Sex")<<tr("Telephone Number")<<tr("Email Address")<<tr("Birthday")<<tr("Address")<<tr("Attachment");
    this->setHorizontalHeaderLabels(headers);
}


另外mywnd的构造函数似乎也不太完美
mywnd::mywnd(QApplication *a)
{
...
}它的父类QWidget应该还是需要初始化的吧,就像上面的datatable::datatable(QWidget *parent) : QTableWidget(parent)
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 26楼 发表于: 2011-12-21
挺简单个事,new出几个控件,放到布局里,有什么复杂的。
只要一个一个的添加控件,填进去一个看看界面变化。  
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线490365333
只看该作者 27楼 发表于: 2011-12-21
回 23楼(roywillow) 的帖子

谢谢提醒,可我还有问题,现在改了datatable的构造函数
datatable::datatable(QWidget *parent)
{
    mytable=new QTableWidget(parent);
    mytable->setColumnCount(7);
    QStringList headers;
    headers<<tr("Name")<<tr("Sex")<<tr("Telephone Number")<<tr("Email Address")<<tr("Birthday")<<tr("Address")<<tr("Attachment");
    mytable->setHorizontalHeaderLabels(headers);
    QVBoxLayout *layout=new QVBoxLayout;
    layout->addWidget(mytable);
    setLayout(layout);
}
给datatable类设置了布局,现在显示成了这样,那么如何解决很大一片空位的问题?
离线roywillow

只看该作者 28楼 发表于: 2011-12-21
回 27楼(490365333) 的帖子
我还是怀疑datatable的问题……那片空白是属于谁的得首先搞清楚啊……
因为你的table中并没有添加其他的组件,只是提供了新的成员函数,所以我倾向于直接继承QTableWidget,这样各种属性会更适合
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线淳于半邪

只看该作者 29楼 发表于: 2011-12-21
new几个控件,在布局一下就ok的啦
离线490365333
只看该作者 30楼 发表于: 2011-12-21
回 28楼(roywillow) 的帖子

继承这下有了很大的改动
#define PHOTOSIZE 100
class datatable:public QTableWidget
{
    Q_OBJECT
public:
    datatable(QWidget * parent=0);
public slots:
    void myupdate(QMap<QString,info> *);
};


datatable::datatable(QWidget *parent):QTableWidget(parent)
{
    setColumnCount(8);
    setRowCount(0);
    QStringList headers;
    headers<<tr("Name")<<tr("Sex")<<tr("Telephone Number")<<tr("Email Address")<<tr("Birthday")<<tr("Address")<<tr("Photo")<<tr("Attachment");
    setHorizontalHeaderLabels(headers);
    horizontalHeader()->setStretchLastSection(true);
    setEditTriggers(QAbstractItemView::NoEditTriggers);
    setColumnWidth(2,150);
    setColumnWidth(3,150);
    setFixedSize(900,250);
}


void datatable::myupdate(QMap<QString, info> *data)
{
    setRowCount(data->size());
    int i=0;
    for(QMap<QString,info>::const_iterator myiter=data->begin();myiter!=data->end();++i,++myiter)
    {
        setItem(i,0,new QTableWidgetItem(myiter.key()));
        setItem(i,1,new QTableWidgetItem( myiter.value().Sex==0?tr("M"):tr("F")) );
        setItem(i,2,new QTableWidgetItem(myiter.value().Tel));
        setItem(i,3,new QTableWidgetItem(myiter.value().Email));
        setItem(i,4,new QTableWidgetItem(myiter.value().Birthday.toString(Qt::ISODate)));
        setItem(i,5,new QTableWidgetItem(myiter.value().Addr));
        QLabel *temp=new QLabel;
        temp->setFixedSize(PHOTOSIZE,PHOTOSIZE);
        temp->setPixmap(myiter.value().Photo);
        setCellWidget(i,6,temp);
        setItem(i,7,new QTableWidgetItem(myiter.value().Attach));
        setRowHeight(i,PHOTOSIZE);
    }
    resizeColumnsToContents();

}

但是发现表格会靠右显示 怎么解决呢?

离线490365333
只看该作者 31楼 发表于: 2011-12-21
回 28楼(roywillow) 的帖子
总觉得自己对布局管理很没办法,这个程序本身貌似问题不大,就是界面上各个组件的排布非常乱。
现在的mywnd类是这样的
class mywnd : public QWidget
{
    Q_OBJECT
private:
    QLabel *NameLabel;
    QLabel *SexLabel;
    QLabel *TelLabel;
    QLabel *EmailLabel;
    QLabel *BirthdayLabel;
    QLabel *AddrLabel;
    QLabel *AttachLabel;
    QLabel *PhotoFrame;

    QLineEdit *NameEdit;
    QComboBox *SexBox;
    QLineEdit *TelEdit;
    QLineEdit *EmailEdit;
    QDateEdit *BirthdayEdit;
    QLineEdit *AddrEdit;
    QLineEdit *AttachEdit;

    QPushButton *OpenButton;
    QPushButton *AddButton;
    QPushButton *RemoveButton;
    QPushButton *QuitButton;
    QPushButton *SaveButton;
    QPushButton *SaveAsButton;
    QPushButton *CleanButton;
    QPushButton *CloseButton;
    QPushButton *NewButton;
    QPushButton *LoadPhotoButton;

    QStatusBar *Information;
    datatable *MyTable;

    QFile MyFile;
    QDataStream MyStream;
    QMap<QString,info> NewData;
    bool IsSaved;
    QApplication *MyApp;
private slots:
    void add();
    void remove();
    void openfile();
    void save();
    void quit();
    void clean();
    void closefile();
    void saveas();
    void newfile();
    void loadphoto();
signals:
    void datachanged(QMap<QString,info> *);
public:
    mywnd(QApplication *);
};
离线490365333
只看该作者 32楼 发表于: 2011-12-21
mywnd::mywnd(QApplication *a)
{
    setWindowTitle(tr("Contact"));

    MyApp=a;
    IsSaved=true;

    NameLabel=new QLabel(tr("&Name"));
    SexLabel=new QLabel(tr("&Sex"));
    TelLabel=new QLabel(tr("&Telephone Number"));
    EmailLabel=new QLabel(tr("&E-mail Address"));
    BirthdayLabel=new QLabel(tr("&Birthyday"));
    AddrLabel=new QLabel(tr("A&ddress"));
    AttachLabel=new QLabel(tr("Atta&chment"));
    PhotoFrame=new QLabel;
    PhotoFrame->setFixedSize(PHOTOSIZE,PHOTOSIZE);
    PhotoFrame->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    PhotoFrame->setPixmap(QPixmap(QString("./default.png")));

    NameEdit=new QLineEdit;
    TelEdit=new QLineEdit;
    SexBox=new QComboBox;
    SexBox->addItem(tr("male"));
    SexBox->addItem(tr("female"));
    EmailEdit=new QLineEdit;
    AddrEdit=new QLineEdit;
    AttachEdit=new QLineEdit;
    BirthdayEdit=new QDateEdit;
    BirthdayEdit->setDisplayFormat(QString("yyyy.MM.dd"));
    BirthdayEdit->setDate(QDate::currentDate());

    AddButton=new QPushButton(tr("&Add"));
    AddButton->setEnabled(false);
    QuitButton=new QPushButton(tr("&Quit"));
    RemoveButton=new QPushButton(tr("&Remove"));
    RemoveButton->setEnabled(false);
    NewButton=new QPushButton(tr("&New"));
    OpenButton=new QPushButton(tr("&Open"));
    OpenButton->setDefault(true);
    SaveButton=new QPushButton(tr("&Save"));
    SaveButton->setEnabled(false);
    SaveAsButton=new QPushButton(tr("Sa&ve As"));
    SaveAsButton->setEnabled(false);
    CleanButton=new QPushButton(tr("C&lean"));
    CloseButton=new QPushButton(tr("&Close"));
    CloseButton->setEnabled(false);
    LoadPhotoButton=new QPushButton(tr("&Load Photo"));
    LoadPhotoButton->setEnabled(false);

    NameLabel->setBuddy(NameEdit);
    SexLabel->setBuddy(SexBox);
    TelLabel->setBuddy(TelEdit);
    EmailLabel->setBuddy(EmailEdit);
    BirthdayLabel->setBuddy(BirthdayEdit);
    AddrLabel->setBuddy(AddrEdit);
    AttachLabel->setBuddy(AttachEdit);

    Information=new QStatusBar(this);
    MyTable=new datatable(this);

    QFormLayout *UpLayout=new QFormLayout;
    UpLayout->addWidget(MyTable);
    UpLayout->addRow(PhotoFrame,LoadPhotoButton);
    UpLayout->addRow(NameLabel,NameEdit);
    UpLayout->addRow(TelLabel,TelEdit);
    UpLayout->addRow(SexLabel,SexBox);
    UpLayout->addRow(EmailLabel,EmailEdit);
    UpLayout->addRow(BirthdayLabel,BirthdayEdit);
    UpLayout->addRow(AddrLabel,AddrEdit);
    UpLayout->addRow(AttachLabel,AttachEdit);

    QHBoxLayout *DownLayout=new QHBoxLayout;
    DownLayout->addWidget(OpenButton);
    DownLayout->addWidget(NewButton);
    DownLayout->addWidget(AddButton);
    DownLayout->addWidget(RemoveButton);
    DownLayout->addWidget(CleanButton);
    DownLayout->addWidget(SaveButton);
    DownLayout->addWidget(SaveAsButton);
    DownLayout->addWidget(CloseButton);
    DownLayout->addWidget(QuitButton);

    QVBoxLayout *MainLayout=new QVBoxLayout;
    MainLayout->addLayout(UpLayout);
    MainLayout->addLayout(DownLayout);
    MainLayout->addWidget(Information);

    setLayout(MainLayout);
    setFixedHeight(sizeHint().height());

    QObject::connect(QuitButton,SIGNAL(clicked()),this,SLOT(quit()));
    QObject::connect(AddButton,SIGNAL(clicked()),this,SLOT(add()));
    QObject::connect(RemoveButton,SIGNAL(clicked()),this,SLOT(remove()));
    QObject::connect(OpenButton,SIGNAL(clicked()),this,SLOT(openfile()));
    QObject::connect(SaveButton,SIGNAL(clicked()),this,SLOT(save()));
    QObject::connect(CleanButton,SIGNAL(clicked()),this,SLOT(clean()));
    QObject::connect(CloseButton,SIGNAL(clicked()),this,SLOT(closefile()));
    QObject::connect(SaveAsButton,SIGNAL(clicked()),this,SLOT(saveas()));
    QObject::connect(NewButton,SIGNAL(clicked()),this,SLOT(newfile()));
    QObject::connect(LoadPhotoButton,SIGNAL(clicked()),this,SLOT(loadphoto()));
    QObject::connect(this,SIGNAL(datachanged(QMap<QString,info> *)),MyTable,SLOT(myupdate(QMap<QString,info> *)));
}
离线ninsun

只看该作者 33楼 发表于: 2011-12-22
手动写窗口上的各个元素十分累人的……
就算是新手我也不建议手动写……
其实把设计师研究好了,你完全可以使用给设计师写插件的方法完成一切你想要的布局、界面效果——这可比手动写界面管理布局要高端多了
我的习惯是,用一切可以简化的方法,无法简化的地方再复杂。
离线490365333
只看该作者 34楼 发表于: 2011-12-22
回 33楼(ninsun) 的帖子
你说的不一定就是对的,很多书上都建议新手手写
离线ninsun

只看该作者 35楼 发表于: 2011-12-22
嘛嘛...
无所谓了……怎么样都好……

还有的书上写的是 void main() 呢
离线淳于半邪

只看该作者 36楼 发表于: 2011-12-27
可能问题:第一:setFixedHeight(sizeHint().height());
                 第二:布局问题
        第三:datatable类中的编写问题
快速回复
限100 字节
 
上一个 下一个