• 7038阅读
  • 6回复

我copy的例程为什么不能运行? [复制链接]

上一主题 下一主题
离线shifan
 
只看楼主 倒序阅读 楼主  发表于: 2009-09-25
#include<QApplication>
#include<QTreeView>
#include<QListView>
#include<QTableView>
#include<QSplitter>
#include<QStandardItemModel>
#include<QStandardItem>
#include<iostream>
using namespace std;

int main(int argc,char *argv[])
{
   QApplication app(argc,argv);
QTreeView *tree = new QTreeView;
QListView *list = new QListView;
QTableView *table = new QTableView;
QSplitter splitter;
splitter.addWidget( tree );
splitter.addWidget( list );
splitter.addWidget( table );

QStandardItemModel model( 5, 2 );
for( int r=0; r<5; r++ )
  for( int c=0; c<2; c++)
  {
    QStandardItem *item =
      new QStandardItem( QString("Row:%1, Column:%2").arg(r).arg(c) );
    if( c == 0 )
      for( int i=0; i<3; i++ )
        item->appendRow( new QStandardItem( QString("Item %1").arg(i) ) );
    model.setItem(r, c, item);
  }

tree->setModel( &model );
list->setModel( &model );
table->setModel( &model );

cout<<"show it"<<endl;

list->setSelectionModel( tree->selectionModel() );
table->setSelectionModel( tree->selectionModel() );

return app.exec();
}
以上是我从Foundations of Qt development上copy的例程,书上是一段一段的,我根据提示把它们集结在了一起,形成程序,但是运行的时候什么都没有,是怎么回事啊?
离线dbzhang800

只看该作者 1楼 发表于: 2009-09-25
额,你连要显示的窗体都没有,更没办法调用其成员函数 show()
离线shifan
只看该作者 2楼 发表于: 2009-09-25
我修改了我的程序,如下:
//main
#include<QApplication>
#include"treeso.h"

int main(int argc,char *argv[])
{
   QApplication app(argc,argv);
   treeso *a;
   a=new treeso();
   app.setActiveWindow(a);
   a->show();

return app.exec();
}

//cpp
#include "treeso.h"
#include<QTreeView>
#include<QListView>
#include<QTableView>
#include<QSplitter>
#include<QStandardItemModel>
#include<QStandardItem>
#include<iostream>
using namespace std;
treeso::treeso()
{
    QTreeView *tree = new QTreeView;
QListView *list = new QListView;
QTableView *table = new QTableView;
QSplitter splitter;
splitter.addWidget( tree );
splitter.addWidget( list );
splitter.addWidget( table );

QStandardItemModel model( 5, 2 );
for( int r=0; r<5; r++ )
  for( int c=0; c<2; c++)
  {
    QStandardItem *item =
      new QStandardItem( QString("Row:%1, Column:%2").arg(r).arg(c) );
    if( c == 0 )
      for( int i=0; i<3; i++ )
        item->appendRow( new QStandardItem( QString("Item %1").arg(i) ) );
    model.setItem(r, c, item);
  }

tree->setModel( &model );
list->setModel( &model );
table->setModel( &model );

cout<<"show it"<<endl;

list->setSelectionModel( tree->selectionModel() );
table->setSelectionModel( tree->selectionModel() );

tree->show();
list->show();
table->show();

}


//h
#ifndef TREESO_H
#define TREESO_H
#include<QWidget>

class treeso:public QWidget
{
   public:
        treeso();
};
#endif // TREESO_H
可以运行,出现一个Application,但是没有出现list,table,tree,不知是怎么回事?
离线dbzhang800

只看该作者 3楼 发表于: 2009-09-25
建议你找点Qt的基础些的例子看看。比如QLyaout的使用,等

你这儿暴露的问题挺多
离线shifan
只看该作者 4楼 发表于: 2009-09-26
这个好像不是layout的事情把,我主要是The Model-View FrameWork这一部分不是很懂
离线dbzhang800

只看该作者 5楼 发表于: 2009-09-26
引用第4楼shifan于2009-09-26 10:05发表的  :
这个好像不是layout的事情把,我主要是The Model-View FrameWork这一部分不是很懂


额,一开始不是,后来是了。你把三个widget(你的3个view)放到了另一个为widget(split)上,却没把这个widget放到你自己的widget上(怎么放,一般都是QLayout)。

不过哦,我一楼的帖子说的不对,其实在return语句前加一句 splitter.show(); 应该就可以了(忘记 QSplitter是QWidget的子类了,抱歉)
离线shifan
只看该作者 6楼 发表于: 2009-10-20
真的是这样的,十分谢谢dbzhang800!
快速回复
限100 字节
 
上一个 下一个