代码之家  ›  专栏  ›  技术社区  ›  Thomi

Qt拆分器禁用

  •  7
  • Thomi  · 技术社区  · 16 年前

    我希望能够阻止用户在运行时移动QSplitter。召唤 setEnabled(false) 这样做,但它也会禁用所有子小部件——这不是我想要的。有办法做到这一点吗?我必须禁用拆分器,然后手动重新启用所有子小部件吗?这似乎相当麻烦,因为这一定是一种相当普遍的做法。

    有人能提出什么建议吗?

    3 回复  |  直到 16 年前
        1
  •  15
  •   luca    8 年前

    执行以下操作:

    for (int i = 0; i < splitter->count(); i++)
    {
        QSplitterHandle *hndl = splitter->handle(i);
        hndl->setEnabled(false);
    }
    
        2
  •  0
  •   Aaron Digulla    16 年前

    实际上,我从未见过有人禁用拆分器:它们的存在是为了让用户可以根据需要布局UI,那么为什么有人想禁用它呢?要么你需要一个拆分器,要么你可以使用一个正常的布局(用户无法调整其大小)。

    closestLegalPosition() getRange() 。如果你只返回小部件的宽度,那么调整大小应该停止工作。

        3
  •  0
  •   Ranty    13 年前

    你必须做两件事。将拆分器内的小部件(不应可调整大小)设置为 FixedSize Qt::ArrowCursor 句柄以零开头(左,未使用),因此两个小部件之间的第一个句柄是索引1。

    #include <QtGui>
    
     int main(int argc, char *argv[])
     {
         QApplication app(argc, argv);
         QWidget window;
         window.resize(800, 300);
         window.setWindowTitle("Splitter Test");
         window.show();
    
         QSplitter *splitter = new QSplitter(&window);
         QListView *listview = new QListView;
         QTreeView *treeview = new QTreeView;
         QTextEdit *textedit = new QTextEdit;
    
         splitter->addWidget(listview);
         splitter->addWidget(treeview);
         splitter->addWidget(textedit);
         splitter->setChildrenCollapsible(false);
    
         splitter->show();
         listview->show();
         treeview->show();
         textedit->show();
    
         //make the lisview 'fix'
         listview->setFixedSize(listview->width(), listview->height());
         //change the cursor over the splitter handle between listview and
         //treeview to ArrowCursor
         splitter->handle(1)->setCursor(Qt::ArrowCursor);;
    
         return app.exec();
     }
    

    现在,第一个拆分器手柄是 disabled