0

ボタンを押すことで作成された ComboBoxes を持つ TableWidget があります。ComboBox とやり取りする場合は、ComboBox の行を取得する必要があるため、別の ComboBox がその内容を変更します。これを見つけました、完全には理解できません。

#include <QtGui>

class TableWidget : public QTableWidget
{
  Q_OBJECT
public:
  TableWidget()
  {
    edit = new QLineEdit(this);
    setColumnCount(5);
    setRowCount(5);
    setCellWidget(4,1, edit);
    connect(edit, SIGNAL(textChanged(const QString)), this, SLOT(test1(const QString)));
  }
public slots:
void test1(const QString &text)
{
  QWidget *wid = QApplication::focusWidget();
  if (wid) {
    QModelIndex index = indexAt(wid->pos());
    qDebug() << index.row();
  }
}

private:
  QLineEdit *edit;

};

#include "main.moc"

int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  TableWidget window;
  window.show();
  return app.exec();
}

上記をPythonで記述しようとすると、次のようになります。

current_widget = QApplication.focusWidget()
>> <PyQt4.QtGui.QComboBox object at 0x0226DDB0>

上記を IndexAt 関数で使用するにはどうすればよいですか?

私はQtDesignerを使用しています。以下は私のテーブルです:

    self.tableWidget = QtGui.QTableWidget(Dialog)
    self.tableWidget.setGeometry(QtCore.QRect(20, 150, 521, 91))
    self.tableWidget.setStyleSheet(_fromUtf8("background-color: rgb(240, 240, 240);"))
    self.tableWidget.setFrameShape(QtGui.QFrame.NoFrame)
    self.tableWidget.setShowGrid(False)
    self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
    self.tableWidget.setColumnCount(3)
    self.tableWidget.setRowCount(0)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setVerticalHeaderItem(0, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setVerticalHeaderItem(1, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setVerticalHeaderItem(2, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(0, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(1, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(2, item)
    self.tableWidget.horizontalHeader().setVisible(False)
    self.tableWidget.horizontalHeader().setStretchLastSection(True)
    self.tableWidget.verticalHeader().setVisible(False)
    self.tableWidget.verticalHeader().setStretchLastSection(False)

そして、これは私がコンボボックスウィジェットを挿入し、必要に応じてアイテムを挿入する方法です:

index = self.tableWidget.rowCount()
criteria1_comboBox = QtGui.QComboBox(self.tableWidget)
font = QtGui.QFont()
font.setPointSize(10)
criteria1_comboBox.setFont(font)

for combo_ind,i in enumerate(["Name", "Extension", "Size"]):
    criteria1_comboBox.addItem(_fromUtf8(""))
    criteria1_comboBox.setItemText(combo_ind, QtGui.QApplication.translate("Dialog", i, None, QtGui.QApplication.UnicodeUTF8))     
self.tableWidget.setCellWidget(index, 0, criteria1_comboBox)
4

2 に答える 2

0

Junuxxが指摘したことに追加します。

あなたが投稿したコードは、ウィジェット、ComboBox があり、テーブル上のその位置 ( と に関して) プログラムが認識していなかった場所で使用できrow、(そこから を取得できる)columnを見つけたいと思っていました。、TableWidget で、配置された可能性がある場所。QModelIndexrow

このindexAt関数は、QModelIndex提供された位置座標 (ピクセル単位) を使用して を返します。コードの場合は ですQLineEditが、QComboBox or anyQWidget` の場合もあります。

ただし、Junuxx のコメントと回答の両方に注意してください。

于 2013-05-21T18:23:37.980 に答える