【问题标题】:Set default alignment for cells in QTableWidget为 QTableWidget 中的单元格设置默认对齐方式
【发布时间】:2013-03-27 12:17:06
【问题描述】:

我知道您可以使用以下方法为每个项目设置对齐方式:

TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);

但是,我想为所有单元格设置默认对齐方式,以便不必在每次创建新项目时都设置它。有可能吗?

【问题讨论】:

    标签: c++ qt qtablewidget text-alignment


    【解决方案1】:

    我认为没有现成的方法可以解决这个问题,但这里有两种可行的方法:


    1.) 子类 QTableWidgetItem

    MyTableWidgetItem::MyTableWidgetItem() :
        QTableWidgetItem()
    {
        setTextAlignment( Qt::AlignLeft );
    }
    

    但是,这对于单个设置可能有点过分了 + 您可能希望重载 QTableWidgetItem 的所有四个构造函数。


    2.) 另一种方法是using a factory instead of calling new
    注意:链接的文章讨论了单元测试,但这样做还有更多优势。

    QTableWidgetItem* MyTableWidgetFactory::createTableWidgetItem( const QString& text ) const
    {
        QTableWidgetItem* item = new QTableWidgetItem( text );
        item->setTextAlignment( Qt::AlignLeft );
        return item;
    }
    

    然后代替

    QTableWidgetItem* myItem = new QTableWidgetItem( "foo" );
    item->setTextAlignment( Qt::AlignLeft );
    

    你可以的

    QTableWidgetItem* myItem = myFactory->createTableWidgetItem( "foo" );
    

    其中myFactoryMyTableWidgetFactory 的对象。

    【讨论】:

      【解决方案2】:

      是的,这是可能的。但是您需要了解您不是在修改表格小部件的属性,而是表格小部件项的属性。首先创建自己的项目,然后根据需要进行设置

       QTableWidgetItem * protoitem = new QTableWidgetItem();
       protoitem->setTextAlignment(Qt::AlignLeft);
       etc...
      

      然后每次你想创建一个新项目而不是使用你使用的构造函数

       QTableWidgetItem * newitem = protoitem->clone();
       tableWidget->setItem(0,0, newitem);
      

      克隆的另一种替代方法(未经测试)是您的 tablewidget 上的to set a prototype

      QTableWidget::setItemPrototype ( const QTableWidgetItem * item )
      

      如果您使用的是 Ui 或者项目是可编辑的,则最后一个可能更合适。

      【讨论】:

        猜你喜欢
        • 2017-09-08
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        • 2015-07-29
        相关资源
        最近更新 更多