OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

Qt (B2) QTableWidgetで複数行のテキスト入力

公開日| 2009年06月18日 | コメントはまだありません。
概要 :
 今回のテーマは、QTableWidgetの入力についてです。QTableWidgetでは、デフォルトで、QLineEditが入力用のWidgetとして 用意されています。QTableWidgetを入力可能状態で、作成するとマウスのダブルクリックなどで、入力できるようになります。
 今回は、その入力をQTextEditやQPlainTextEditなどの複数行入力できるWidgetへ切り替える方法について記述したいと思います。

ここで使用したサンプルソースコード:

簡単なQTableWidgetの画面
単純なQTableWidgetのサンプル画面を作ってみましょう。
以下のコードでは、3x3の簡単なQTableWidgetの画面を作成しています。

[main.cpp]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <QtGui>
 
 
int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
 
	QTableWidget tableWidget(3, 3);
	//	set edit trigger event
	tableWidget.setEditTriggers(QAbstractItemView::DoubleClicked
	                            | QAbstractItemView::SelectedClicked
								| QAbstractItemView::EditKeyPressed );
 
	//	set title
	QStringList headerLabels;
	headerLabels << "Name" << "Attribute" << "Comment";
	tableWidget.setHorizontalHeaderLabels(headerLabels);
 
	QTableWidgetItem *item[3];
	//	set sample data values.
	for (int nrow = 0; nrow<3; nrow++ ) {
		item[0] = new QTableWidgetItem(QString("sample item name #%1").arg(nrow+1));
		item[1] = new QTableWidgetItem(QString("att #%1").arg(nrow+1));
		item[2] = new QTableWidgetItem(QString("comment #%1\nreturn ").arg(nrow+1));
 
		for(int ncol=0;ncol<3;ncol++){
			tableWidget.setItem(nrow, ncol, item[ncol]);
 
		}
	}
 
	//	fit of column size at contents.
	tableWidget.resizeColumnsToContents();
	tableWidget.resize(500, 300);
 
	//	table show.
	tableWidget.show();
 
	return app.exec();
}

10行目から12行目で、入力可能な状態へするときの動作を定義しています。
ここでは、ダブルクリックと、選択状態で1クリックとF2などの入力キー操作で、入力可能な状態へ遷移します。
33行目は、セルの多いさを内容にあわせて縦横ともに拡大・縮小するように指示しています。

これをコンパイルして、実行すると、以下のような画面が表示されます。



3カラム目は、情報の中に改行情報が含まれていますが、QLineEditでは、それが無視されます。


では、これを入力できるようにするには、ドキュメントから、すぐに見つかるのは、 QTableWidgetのvoid setCellWidget () だと思います。

では、このメソッドを使った場合、どのようになるか見てましょう。

setCellWidgetを使って、複数行の入力画面を作成
先の単純なQTableWidgetのサンプル画面を変更してみましょう。
以下のコードでは、3x3の簡単なQTableWidgetの画面を作成しています。

[main.cpp]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <QtGui>
 
 
int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
 
	QTableWidget tableWidget(3, 3);
	//	set edit trigger event
	tableWidget.setEditTriggers(QAbstractItemView::DoubleClicked
	                            | QAbstractItemView::SelectedClicked
								| QAbstractItemView::EditKeyPressed );
 
	//	set title
	QStringList headerLabels;
	headerLabels << "Name" << "Attribute" << "Comment";
	tableWidget.setHorizontalHeaderLabels(headerLabels);
 
	QTableWidgetItem *item[3];
	//	set sample data values.
	for (int nrow = 0; nrow<3; nrow++ ) {
		item[0] = new QTableWidgetItem(QString("sample item name #%1").arg(nrow+1));
		item[1] = new QTableWidgetItem(QString("att #%1").arg(nrow+1));
		item[2] = new QTableWidgetItem(QString("comment #%1\nreturn ").arg(nrow+1));
 
		for(int ncol=0;ncol<3;ncol++){
			tableWidget.setItem(nrow, ncol, item[ncol]);
 
			QPlainTextEdit *ptext=new QPlainTextEdit(&tableWidget);
			ptext-->setPlainText(item[ncol]-->text());
			tableWidget.setCellWidget(nrow, ncol, ptext);
		}
	}
 
	//	fit of column size at contents.
	tableWidget.resizeColumnsToContents();
	tableWidget.resize(500, 300);
 
	//	table show.
	tableWidget.show();
 
	return app.exec();
}

簡単ですね。
29行目から31行目で、QPlainTextEditをsetCellWidgetで各セルに関連付けを行っています。

これをコンパイルして、実行すると、以下のような画面が表示されます。



全てのセルが、常に複数行のテキストの入力が行える状態ですが、恐らく、期待していた画面と違うと思います。 これでは、QGridLayoutでQPlainTextEditを貼り付けた画面と同じような画面です。

では、最初のサンプルの動作と同じような(入力状態が切り替わるような)動作で、単純にQLineEditを QPlainTextEditへ切り替えるには、どうすれば良いでしょう。

Delegateを継承したクラスを使うのですが、 次は、QStyledItemDelegateを継承したクラスを作成して、QTableWidgetをコントロールしてみましょう。



ブックマークへ追加: はてなブックマークへ追加するdel.icio.usLivedoor ClipYahoo!FC2Nifty ClipPOOKMARK. AirlinesBuzzurl(バザール)Choixnewsing

Trackback URL

このコメントは管理人から承認された後、表示されます。


コメント

コメントをどうぞ





*





donate red cross
がんばろう、日本!
日本赤十字の募金は、Googleで受け付けてます。
http://www.google.co.jp/intl/ja/crisisresponse/japanquake2011.html

義援金詐欺・フィッシングサイトにご注意ください。

コンテンツ

最近の記事


タグクラウド

リンク

このサイトは?

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

ブックマークへ追加

はてなブックマークへ追加するdel.icio.usLivedoor ClipYahoo!FC2Nifty ClipPOOKMARK. AirlinesBuzzurl(バザール)Choixnewsing