我有一个包含以下结构的小部件和布局的大布局:
QVBoxLayout
QTableView
QPushButton
我将布局上的边距,填充和间距设置为0.在Mac OS X上呈现的方式,该按钮不会填充其所有空间。相反,它周围有一些填充物。奇怪的是,布局似乎知道这一点,并确保表格视图与按钮宽度一样宽:
当我删除按钮时,表格视图返回其全宽:
如何更改它以使按钮和表格视图变得与布局一样宽?
我使用了样式表的填充和边距,虽然我可以使用它们使按钮更宽,但树视图周围的额外填充仍然存在。到目前为止我唯一的解决方案是将按钮包装在另一个小部件中,然后通过样式表将其边距和填充设置为0,但后来我失去了圆润的外观。
答案 0 :(得分:1)
你必须将布局边距设置为0,而不是QPushButton的边距。
看一看。这是设计师的外观和感觉:
这是QWidget的布局属性:
这是最终的小部件:
答案 1 :(得分:0)
经过一些实验,我发现它使用QToolButton而不是QPushButton按预期工作。这不是解释,但它是一个解决方案。
答案 2 :(得分:0)
嗯。有趣。以下代码用于测试您的问题,但找不到任何问题。它只是按原样工作。(在Mac OSX上使用Qt 4.8.2)。代码是自包含的。只需将其作为main.cpp构建应用程序,然后单击show and hide按钮进行测试。
#include <QtGui>
class FramedWidget : public QFrame
{
public:
FramedWidget(QWidget* inner, QWidget* parent=0)
: QFrame(parent)
{
setFrameStyle(QFrame::Panel | QFrame::Sunken);
QVBoxLayout* lay = new QVBoxLayout(this);
lay->setContentsMargins(0,0,0,0);
lay->setSpacing(0);
lay->addWidget(inner);
}
};
class LayoutWidget : public QSplitter
{
public:
LayoutWidget(QWidget* parent=0)
: QSplitter(parent)
{
QTableWidget* table = new QTableWidget;
m_button = new QPushButton("Testing...");
QPushButton* showButton = new QPushButton("Show");
QPushButton* hideButton = new QPushButton("Hide");
connect(showButton, SIGNAL(clicked()),
m_button, SLOT(show()));
connect(hideButton, SIGNAL(clicked()),
m_button, SLOT(hide()));
QWidget* tester = new QWidget;
QVBoxLayout* testerLay = new QVBoxLayout(tester);
testerLay->addWidget(table);
testerLay->addWidget(m_button);
QWidget* controller = new QWidget;
QVBoxLayout* controllerLay = new QVBoxLayout(controller);
controllerLay->addWidget(showButton);
controllerLay->addWidget(hideButton);
controllerLay->addWidget(new QTextEdit);
this->addWidget(new FramedWidget(controller));
this->addWidget(new FramedWidget(tester));
}
protected:
QPushButton* m_button;
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
LayoutWidget* editor = new LayoutWidget;
editor->show();
editor->raise();
return app.exec();
}
答案 3 :(得分:0)
保留按钮外观的另一种解决方法是将布局放在QFrame容器窗口小部件中,并在样式表中设置负填充。容器必须是QFrame或填充不能工作。